package cn.shadow.beans;

/**
 * Bean后续流程
 * @author 冯啸迪
 */
public interface BeanPostProcessor {

    /**
     * Bean加载前的流程
     * @param bean Bean
     * @param beanName 名称
     * @return 返回Bean如果是AOP的话，那么可能会存在返回远啦的代理对象
     * @throws Throwable 抛出异常
     */
    default Object postProcessBeforeInitialization(Object bean, String beanName) throws Throwable{
        return bean;
    }

    /**
     * Bean加载后的流程
     * @param bean 原始的bean
     * @param beanName bean名称
     * @return 返回处理后的Bean也可能不处理
     * @throws Throwable 可能抛出的异常
     */
    default Object postProcessAfterInitialization(Object bean, String beanName)throws Throwable{
        return bean;
    }

}
